package com.lin.sqltool.service;


import com.lin.sqltool.common.SqlExecutionResult;
import com.lin.sqltool.model.DatabaseInfoModel;
import com.lin.sqltool.model.ConnectionInfoModel;
import com.lin.sqltool.model.FieldInfoModel;
import com.lin.sqltool.model.IndexInfoModel;
import javafx.scene.control.Tab;

import java.util.List;

public interface ConnectionService {


    /**
     * 测试连接
     * @param connectionInfoModel
     * @return
     */
    boolean testConnection(ConnectionInfoModel connectionInfoModel);

    /**
     * 获取全部数据库信息
     * @param info
     * @return
     */
    List<String> getDatabases(ConnectionInfoModel info);

    /**
     * 获取全部表信息
     * @param info
     * @param database
     * @return
     */
    List<String> getTables(ConnectionInfoModel info, String database);

    /**
     * 获取表的DDL语句
     * @param info
     * @param database
     * @param table
     * @return
     */
    String getTableDDL(ConnectionInfoModel info, String database, String table);


    /**
     * 表字段信息
     * @param info
     * @param database
     * @param table
     * @return
     */
    List<FieldInfoModel> getTableColumns(ConnectionInfoModel info, String database, String table);

    /**
     * 表索引信息
     * @param info
     * @param database
     * @param table
     * @return
     */
    List<IndexInfoModel> getTableIndexes(ConnectionInfoModel info, String database, String table);


    /**
     * 执行sql
     * @param info
     * @param database
     * @param sql
     * @return
     */
    SqlExecutionResult executeSql(ConnectionInfoModel info, String database, String sql);


    /**
     * 执行sql
     * @param info
     * @param database
     * @param sql
     * @return
     */
    SqlExecutionResult executeSql(ConnectionInfoModel info, String database, String sql , Tab tab);


    /**
     * 获取数据库信息
     * @param info
     * @param databaseName
     * @return
     */
    DatabaseInfoModel getDatabaseInfo(ConnectionInfoModel info, String databaseName);

}
